package xpn.platform.common.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.LinkedHashMap;

/**
 * 平台配置信息Bean：存放平台配置信息 使用@ConfigurationProperties注解由系统从配置文件中读取xpn节点下的属性注入到Bean中
 * 注意属性和配置文件的对应关系
 *
 * @author duwei
 * @version 2017/9/1 10:42
 */
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "xpn")
public class XpnPlatformConfig {

	// 登录
	private String login = "You need authentication, pls post a request to <a href='/api/login'>/api/login</a>. ";

	// Say hello
	private String hello = "Welcome to XPN platform! <br><a href='/api'>RESTful APIs</a>";

	/**
	 * 安全配置
	 */
	private SecurityConfig security;

	/**
	 * 附件配置
	 */
	private AttachmentConfig attachment;

	/**
	 * 权限配置
	 */
	private PermissonConfig permisson;
	
	/**
	 * api地址配置
	 */
	private ApiConfig api;

	/**
	 * 用户配置
	 */
	private UserConfig user;

	/**
	 * 待办
	 */
	private TodoLinkConfig todoLink;

	private DoneLinkConfig doneLink;

	private String apiService;

	/**
	 * 内部静态类定义安全配置数据结构
	 */
	@Getter
	@Setter
	public static class SecurityConfig {
		/**
		 *  存放Token的变量名称
		 */
		private String authenticationTokenName = "xpnToken";
		/**
		 * 密码摘要方式
		 */
		private String passwordDigest = "";
		/**
		 * 过滤链配置
		 */
		private LinkedHashMap<String, String> filterChainDefinitions = new LinkedHashMap<>();
	}

	/*
	 * 内部静态类定义附件配置数据结构
	 */
	@Getter
	@Setter
	public static class AttachmentConfig {
		private String root; // 根路径
	}

	/*
	 * 内部静态类定义权限配置数据结构
	 */
	@Getter
	@Setter
	public static class PermissonConfig {
		private String service; // 根路径
	}
	/*
	 * 内部静态类定义api地址配置数据结构
	 */
	@Getter
	@Setter
	public static class ApiConfig {
		private String service; // 根路径
	}

	/*
	 * 内部静态类定义用户ou查询配置数据结构
	 */
	@Getter
	@Setter
	public static class UserConfig {
		private String service; // 根路径
		private String orgNameFild; // 根路径
	}

	/**
	 * 内部静态类定义待办配置数据结构
	 */
	@Getter
	@Setter
	public static class TodoLinkConfig {
		private String service; // 根路径
		private String openForm; // 打开表单
	}

	/**
	 * 内部静态类定义已办配置数据结构
	 */
	@Getter
	@Setter
	public static class DoneLinkConfig {
		private String service; // 根路径
	}

}